자바 오버라이딩
IT 위키
자바 오버라이딩(Java Overriding, 上書定義)은 자바에서 상속 관계에 있는 하위 클래스가 상위 클래스의 메서드를 재정의하여 자신만의 방식으로 구현하는 객체 지향 프로그래밍의 핵심 개념 중 하나이다.
1 개요[편집 | 원본 편집]
오버라이딩은 다형성을 실현하기 위한 주요 수단으로, 상속받은 메서드의 기본 동작을 하위 클래스의 요구에 맞게 변경할 수 있다. 이를 통해 코드 재사용성과 유연성을 높일 수 있으며, 런타임 시점에 호출할 메서드가 결정되는 동적 바인딩(Dynamic Binding)을 가능하게 한다.
2 오버라이딩의 조건[편집 | 원본 편집]
- 메서드 이름, 매개변수 목록, 반환형이 상위 클래스의 메서드와 동일해야 함
- 접근 제어자는 상위 클래스보다 좁을 수 없음 (예: public → private 불가)
- final, static, private 메서드는 오버라이딩 불가
- @Override 어노테이션 사용 권장 (컴파일 시 정확성 검증 가능)
3 예제[편집 | 원본 편집]
다음은 오버라이딩의 기본 예제이다.
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // 출력: 멍멍!
}
}
4 오버로딩과의 차이[편집 | 원본 편집]
- 오버라이딩: 상위 클래스의 메서드를 동일한 시그니처로 재정의
- 오버로딩: 같은 클래스 내에서 이름은 같되 매개변수가 다른 메서드를 여러 개 정의
5 주의 사항[편집 | 원본 편집]
- 생성자는 오버라이딩 대상이 아니다
- 예외(Exception) 처리 시, 오버라이딩 메서드는 상위 클래스보다 더 넓은 범위의 예외를 던질 수 없다
- 다형성 사용 시 오버라이딩된 메서드가 실제 객체 기준으로 호출됨
6 관련 키워드[편집 | 원본 편집]
- @Override 어노테이션
- 다형성(polymorphism)
- 동적 바인딩(Dynamic Binding)
- 상속(inheritance)
7 같이 보기[편집 | 원본 편집]
8 참고 문헌[편집 | 원본 편집]
- Joshua Bloch, *Effective Java*, Addison-Wesley, 2018.
- Kathy Sierra and Bert Bates, *Head First Java*, O'Reilly Media, 2022.